﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Http;
using System.Net;

namespace AirlineServer.Controllers
{
    public class VietnamAirlineController : ApiController
    {
        //
        // GET: /VietnameAirline/

        public List<List<FlightInfo>> Get(string currency, string direction, string depCity, string depDay, string depMonth, 
            string retCity, string retDay, string retMonth, string ADT, string CHD, string INFANT)
        {
            List<List<FlightInfo>> flights = new List<List<FlightInfo>>();
            //Create link to get info
            string url = "https://cat.sabresonicweb.com/SSWVN/meridia?language=vi&posid=B3QE&page=requestAirMessage_air&action=airRequest&realrequestAir=realRequestAir&actionType=nonFlex&classService=CoachClass&currency="+currency+
                "&depTime=0600&retTime=0600&direction="+direction+"&departCity="+depCity+"&depDay="+depDay+"&depMonth="+depMonth+"&temp_date=&returnCity="+retCity+"&retDay="+retDay+"&retMonth="+retMonth+
                "&temp_date=&ADT="+ADT+"&CHD="+CHD+"&INF="+INFANT+"&submit=T%C3%ACm%20chuy%E1%BA%BFn%20bay&wpf_timed_action_0VNAirline_00215IBEFastTabV2_00215bookingYourTrip_00515vn_0051513b989ded0c_005155a6ae_1=&ShowNote=Qu%C3%BD%20kh%C3%A1ch%20c%E1%BA%A7%20nh%E1%BA%AD%20%C4%91u7847%20y%20%C4%91u7911%20%20th%C3%B4ng%20tin%20%C4%91u7875%20%20l%C3%A0m%20th%E1%BB%A7t%E1%BB%A5%20!&wclang=VI&txtFamilyName=&txtMidName=&slDeparture=&txtConfirmCode=&txtFlightNumber=&rdoDay=on&";

            FlightSearch search = new FlightSearch();
            search._FlightType = direction;
            search.GetAllFlights(url);
            flights.Add(search._DepartFlights);
            flights.Add(search._ReturnFlights);
            return flights;
        }

        /// <summary>
        /// Tiến hành đặt chỗ và trả về mã đặt chỗ.
        /// Thông tin truyền vào gồm có baseUri(có trong bất kỳ chuyến bay nào-đều giống nhau),inCode,outCode :giá trị value trong ticket được chọn lần lượt với chuyến bay đi và đến
        ///                             thông tin về khách hàng :tên, họ, điện thoại di động(chú ý mobile_CityCode là bốn số đầu của số điện thoại bỏ số '0'),phần mobile_PhoneNumber là phần còn lại,
        ///                             tương tự với số dthoai nhà, email,số tiền tổng (lấy trường totalPrice trong ticket),số tiền chưa cộng phí(lấy giá trị baseFare), tên ngân hàng được chọn để thanh toán sau này)
        /// </summary>
        public string Get(  string outCode, string inCode, string direction, string depCity, string depDay, string depMonth, string arrCity, string arrDay,
                            string arrMonth, string ADT, string prefix, string middleName, string lastName, string mobile_CityCode, string mobile_PhoneNumber, 
                            string homeCode,string homeNumber, string email, string totalPrice, string baseFare, string bankName)
        {
            FlightSearch s = new FlightSearch();
            string url = "https://cat.sabresonicweb.com/SSWVN/meridia?language=en&posid=B3QE&page=requestAirMessage_air&action=airRequest&realrequestAir=realRequestAir&actionType=nonFlex&classService=CoachClass&currency=VND"+
                "&depTime=0600&retTime=0600&direction="+direction+"&departCity="+depCity+"&depDay="+depDay+"&depMonth="+depMonth+"&temp_date=&returnCity="+arrCity+"&retDay="+arrDay+"&retMonth="+arrMonth+
                "&temp_date=&ADT="+ADT+"&CHD=0&INF=0&submit=T%C3%ACm%20chuy%E1%BA%BFn%20bay&wpf_timed_action_0VNAirline_00215IBEFastTabV2_00215bookingYourTrip_00515vn_0051513b989ded0c_005155a6ae_1=&ShowNote=Qu%C3%BD%20kh%C3%A1ch%20c%E1%BA%A7%20nh%E1%BA%AD%20%C4%91u7847%20y%20%C4%91u7911%20%20th%C3%B4ng%20tin%20%C4%91u7875%20%20l%C3%A0m%20th%E1%BB%A7t%E1%BB%A5%20!&wclang=VI&txtFamilyName=&txtMidName=&slDeparture=&txtConfirmCode=&txtFlightNumber=&rdoDay=on&";

            WebClient client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;

            string t = client.DownloadString(new Uri(url));;
            List<FlightInfo> info = s.SearchDepartFlight(t.Trim());
            List<FlightInfo> returnflight = new List<FlightInfo>();
            if (direction == "returntravel")
            {
                 returnflight = s.GetAllReturnFlight(t.Trim());
            }
            string baseUri = info[0]._BaseUri;

            s.GetCabins(baseUri, outCode, inCode, direction, depCity, depDay, depMonth, arrCity, arrDay, arrMonth, ADT);
            s.SubmitPassenger(baseUri, prefix, middleName, lastName, mobile_CityCode, mobile_PhoneNumber, homeCode, homeNumber, email);
            string code = s.GetBookingCode(baseUri, totalPrice, baseFare, bankName);
            return code;
        }
    }
}
